Fox's Git Mirrors
pkg/cli/status.go 61af5556362c8bdf7c09a1c01bc84f81629f281b (61af5556) Text, 2.57 KB
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2024-2026 Quad4.io
package cli
import (
"flag"
"fmt"
"time"
"quad4/reticulum-go/pkg/rnsutil"
)
func RunStatus(args []string, opt ...Options) int {
stdout, stderr := cliIO(opt)
fs := flag.NewFlagSet("rgostatus", flag.ContinueOnError)
fs.SetOutput(stderr)
configDir := fs.String("config", "", "path to config directory")
jsonOut := fs.Bool("json", false, "emit JSON")
all := fs.Bool("a", false, "include all interfaces")
nameFilter := fs.String("n", "", "filter interfaces by name substring")
links := fs.Bool("l", false, "include link count")
sortBy := fs.String("s", "", "sort by rate|rx|tx|rxs|txs|traffic|announce|arx|atx|prx|ptx|held")
sortAsc := fs.Bool("r", false, "sort ascending (default descending)")
timeout := fs.Duration("timeout", 10*time.Second, "RPC timeout")
quiet := fs.Bool("q", false, "quiet: suppress stderr hints")
if err := fs.Parse(args); err != nil {
return 2
}
cfg, err := rnsutil.LoadConfigDir(*configDir)
if err != nil {
fmt.Fprintf(stderr, "config: %v\\n", err)
return 1
}
client, err := rnsutil.DialRPC(cfg, nil)
if err != nil {
fmt.Fprintf(stderr, "%s: %v\\n", errMsg(stderr, "rpc"), err)
if !*quiet {
fmt.Fprintln(stderr, warnMsg(stderr, "hint: point -config at the daemon config dir (e.g. ~/.reticulum for rnsd)"))
fmt.Fprintln(stderr, warnMsg(stderr, "hint: align shared_instance_type (unix on Linux by default, or tcp) and instance_name / ports"))
}
return 1
}
client.SetTimeout(*timeout)
stats, err := client.GetInterfaceStats()
if err != nil {
fmt.Fprintf(stderr, "%s (%s): %v\\n", errMsg(stderr, "interface stats"), client.Addr(), err)
if !*quiet {
fmt.Fprintln(stderr, warnMsg(stderr, "hint: start rnsd or reticulum-go first, then retry"))
fmt.Fprintln(stderr, warnMsg(stderr, "hint: for Python rnsd use: rgostatus -config ~/.reticulum"))
}
return 1
}
rnsutil.SortInterfaceStats(&stats, *sortBy, *sortAsc)
var linkCount *int
if *links {
n, err := client.GetLinkCount()
if err != nil {
fmt.Fprintf(stderr, "link count: %v\\n", err)
return 1
}
linkCount = &n
}
if *jsonOut {
if err := rnsutil.WriteStatusJSON(stdout, stats); err != nil {
fmt.Fprintf(stderr, "json: %v\\n", err)
return 1
}
return 0
}
opts := rnsutil.StatusOptions{
NameFilter: *nameFilter,
SortBy: *sortBy,
SortAsc: *sortAsc,
ShowAll: *all,
}
if err := rnsutil.WriteStatusHuman(stdout, stats, linkCount, opts); err != nil {
fmt.Fprintf(stderr, "write: %v\\n", err)
return 1
}
return 0
}
Served by rngit 1.5.2 - Generated in 0.02s